#include <SDL/SDL.h>
#include <SDL/SDL_ttf.h>
#include <SDL/SDL_mixer.h>
#include <iostream>
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#include <bitset>
#define FPS_LIMIT 75

#include <screen.h>
#include <sprites.h>
#include <map.h>

#include "./headers/ingame.h"

//Основные функции

void keyboard_event(struct game_all* game_all, SDL_Event* event)
{//обработка событий клавиатуры

    if (event->key.keysym.sym == SDLK_ESCAPE)
    {
        game_all->game = 0;
    }
} //keyboard_event() окончание

void mainLoop(struct game_all* game_all)
{//Основной цикл игры

    SDL_Event event;
    while (SDL_PollEvent(&event))
    {
        if (event.type==SDL_QUIT)
        {// СОбытие SDL_QUIT генерируется при нажатии на кнопку закрытия окна
            game_all->game = 0;
        }
        switch (event.type)
        {
        case SDL_KEYDOWN:
            keyboard_event(game_all, &event);
        default:
            break;
        }
    }
    ++game_all->screen.frames;

    game_all->screen.now = SDL_GetTicks(); //Возвращает время в милисекундах, прошедшее с момента инициализации SDL

    //вычисляется FPS и если он слишком высок то программа замедляеться
    if (game_all->screen.now > game_all->screen.then)
    {
        game_all->screen.fps = (int) ((double) game_all->screen.frames * 1000) / (game_all->screen.now - game_all->screen.then);
    }

    if (game_all->screen.fps > FPS_LIMIT)
    {
        SDL_Delay(1000 / FPS_LIMIT);
    }

    SDL_Flip(game_all->screen.display); // Все что было отрисовано выводится на экран
    screen_clear(&game_all->screen); // экран отчищается и заливается указанным цветом

}//mainLoop() Окончание

int main(int n, char **s)
{
    atexit(SDL_Quit);
    struct game_all game; /* переменной game Присваивается структура доступ к данным так game.screen в структуре game_all screen
    объявленна как указатель на структуру след доступ к данным game.screen->width */

    memset(&game, 0, sizeof (game)); // обнуляем все члены структуры

    game.game = true;


    screen_init(&game.screen, 800, 600, false);

    init_map(&game.screen);

    loadsprite_png(1,"./data/ui/panel.png",&game.screen);

    loadsprite_png(1001,"./data/map/t-e-wc.png",&game.screen);


    while (game.game)
    {

        draw_map(&game.screen, 64, 64);// Рисовать карту тайлами 64х64

        drawSprite(1,0,0,&game.screen);// Панель сверху

        font_print (255,0,0,game.screen.display->w-97,1,"FPS: ",&game.screen);
        font_print (255,0,0,game.screen.display->w-34,1,game.screen.fps,&game.screen);

        mainLoop(&game);



    }
    return 0;
}

